python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

您所在的位置:网站首页 Python 扣图 python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

python opencv在图像中裁剪任意形状多边形,裁剪镂空多边形, 裁剪多个多边形

2023-08-12 13:33| 来源: 网络整理| 查看: 265

一、裁剪单个多边形 import numpy as np import cv2 # 读取图像 img = cv2.imread("dog.jpg") # 坐标点points pts = np.array([[10, 10], [15, 0], [35, 8], [100, 20], [300, 45], [280, 100], [350, 230], [30, 200]]) pts = np.array([pts]) # 和原始图像一样大小的0矩阵,作为mask mask = np.zeros(img.shape[:2], np.uint8) # 在mask上将多边形区域填充为白色 cv2.polylines(mask, pts, 1, 255) # 描绘边缘 cv2.fillPoly(mask, pts, 255) # 填充 # 逐位与,得到裁剪后图像,此时是黑色背景 dst = cv2.bitwise_and(img, img, mask=mask) # 添加白色背景 bg = np.ones_like(img, np.uint8) * 255 cv2.bitwise_not(bg, bg, mask=mask) # bg的多边形区域为0,背景区域为255 dst_white = bg + dst cv2.imwrite("mask.jpg", mask) cv2.imwrite("dst.jpg", dst) cv2.imwrite("dst_white.jpg", dst_white)

裁剪结果:

原图:

mask:

裁剪后:

  二、裁剪多个多边形

已有多组坐标点pts,代表着多个多边形区域。

思路:对每组坐标点都在mask上进行相同的操作即可。这里就不重复写了。

三、裁剪镂空多边形

已有多组坐标点pts,其中一组表示最外层多边形,其余的表示镂空区域多边形。

思路1:对于最外层多边形在mask上进行白色填充(255);对于镂空区域多边形在mask上进行黑色填充(0)即可。(推荐)

思路2:对每个多边形区域都生成一个mask,用原图分别进行裁剪,然后做图像减法,最后再添加白色背景即可。这里就不重复写了。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3